main(){
//1.泛型类， 约束数据结构为 String
var dataSource = MyDataSource<String>();
//2.调用方法，只能添加string类型的数据
dataSource.pushData('11');
dataSource.pushData('22');
dataSource.pushData('33');
//dataSource.pushData(1);//报错，类型不匹配
print('当前的数据数量${dataSource.totolCount()}');
//3.调用方法，只能获取string类型的数据
// `print` 函数返回值为 void，不能将其赋值给 res，先直接获取数据再打印
var res = dataSource.get(0);//res类型推导为string
print('当前索引为0的数据为$res');

}
//抽象类接口 interface 可写可不写
abstract interface class IDataSource<T>{
  int totolCount();
  T get(int index);
  }
  //实现接口


class MyDataSource<T> implements IDataSource<T>{

  //私有的，避免被直接修改，通过泛型约束数据类型
  List<T> _dataArray = [];
  @override
int totolCount(){
  return _dataArray.length;
}
//约束泛型，只能时num类型或其子类型

@override
T get(int index){
  return _dataArray[index];
}
//新增自定义方法 如：添加数据
void pushData(T data){
  _dataArray.add(data);
}
//新增自定义方法 ，如  清空数据
void clearData(){
  _dataArray.clear();
}

}